<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 15-10-2014 ; 22-11-2014 ; 21-02-2015
class Localidad extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las localidades activas o inactivas pero NO las borradas
	//Si idProvincia es igual a cero, hay que mostrar todas las localidades existentes menos las borradas
	//Si idProvincia es distinto de cero, hay que mostrar solo las localidades de la provincia en cuestion
	function consultar($idProvincia=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoAdministrador') == '1')){
			//Segunda comprobacion: Que idProvincia pasado sea numerico y mayor o igual que cero.
			if(is_numeric($idProvincia) && $idProvincia>=0){
				//Cargo el modelo donde estan los datos de las provincias
				$this->load->model('m_provincia');
				
				//Busco a la provincia que hay que visualizarle las localidades
				$provincia = $this->m_provincia->get($idProvincia);
				
				//Tercera comprobacion: Que la provincia pasada por la url sea existente o bien el id sea igual a cero
				if($provincia->num_rows() == 1 || $idProvincia==0){
					//Busco todas las provincias activas
					$listadoProvincias = $this->m_provincia->buscarActivos();
					
					//Le paso el listado de todas las provincias a la vista para que las muestre en la lista seleccionable para filtrar
					$datos['provincias'] = $listadoProvincias;
					
					//Cargo el modelo donde estan los datos de las localidades registradas para pedirle un listado con todas ellas
					$this->load->model('m_localidad');
					
					//Armamos la restriccion a la consulta de localidades
					$restriccion = "";
					if($idProvincia != 0){
						$restriccion = " AND localidad.idProvincia=".$idProvincia;					
					}
					
					//Busco todas las localidades activas o inactivas, pero no las borradas segun la restriccion
					$listadoLocalidades = $this->m_localidad->buscar($restriccion);
					
					//Le paso el listado de las localidades a la vista para que las muestre en una tabla
					$datos['localidades'] = $listadoLocalidades;
					
					//Le paso cual es la provincia seleccionada
					$datos['idProvinciaSel'] = $idProvincia;
					
					//Cargo la vista donde se muestra la tabla de localidades y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_localidades', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para consultar los registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar la localidad pasada por la url
	//El segundo parametro indica si hay que filtrar por provincias el resultado
	function eliminar($idLocalidad=null, $idProvincia=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoAdministrador') == '1')){
			//Segunda comprobacion: Que idLocalidad pasado sea numerico y mayor que cero. Ademas que idProvincia pasado sea numerico y mayor o igual que cero.
			if(is_numeric($idLocalidad) && $idLocalidad>0 && is_numeric($idProvincia) && $idProvincia>=0){
				//Cargo el modelo donde estan los datos de las localidades registradas
				$this->load->model('m_localidad');
				
				//Busco a la localidad que hay que eliminar
				$localidad = $this->m_localidad->get($idLocalidad);
				
				//Cargo el modelo donde estan los datos de las provincias registradas
				$this->load->model('m_provincia');
				
				//Busco a la provincia de la localidad que hay que eliminar
				$provincia = $this->m_provincia->get($idProvincia);
				
				//Tercera comprobacion: Que la localidad y la provincia pasada por la url sea existente, o bien la provincia sea cero
				if($localidad->num_rows() == 1 && ($provincia->num_rows() == 1 || $idProvincia==0)){
					//Elimino a la localidad pasada por la url
					$respuesta = $this->m_localidad->eliminar($idLocalidad, $this->session->userdata('idUsuarioLog'));
					
					//Busco todas las provincias activas
					$listadoProvincias = $this->m_provincia->buscarActivos();
					
					//Le paso el listado de todas las provincias a la vista para que las muestre en la lista seleccionable para filtrar
					$datos['provincias'] = $listadoProvincias;					
					
					//Armamos la restriccion a la consulta de localidades
					$restriccion = "";
					if($idProvincia != 0){
						$restriccion = " AND localidad.idProvincia=".$idProvincia;					
					}
					
					//Busco todas las localidades activas o inactivas, pero no las borradas segun las restricciones
					$listadoLocalidades = $this->m_localidad->buscar($restriccion);
					
					//Le paso el listado de las localidades a la vista para que las muestre en una tabla
					$datos['localidades'] = $listadoLocalidades;
					
					//Le paso la provincia seleccionada
					$datos['idProvinciaSel'] = $idProvincia;
					
					//Cargo la vista donde se muestra la tabla de localidades
					$this->load->view('v_localidades', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear una localidad nueva
	function abrirPantallaCrear($idProvincia=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoAdministrador') == '1')){
			//Segunda comprobacion: Que idProvincia pasado sea numerico y mayor o igual que cero.
			if(is_numeric($idProvincia) && $idProvincia>=0){
				//Cargo el modelo donde estan los datos de las provincias registradas
				$this->load->model('m_provincia');
				
				//Busco a la provincia a la que hay que agregarle una localidad
				$provincia = $this->m_provincia->get($idProvincia);
				
				//Tercera comprobacion: Que la provincia pasada por la url sea existente, o bien la provincia sea cero
				if($provincia->num_rows() == 1 || $idProvincia==0){
					//Busco todas las provincias activas
					$listadoProvincias = $this->m_provincia->buscarActivos();
					
					//Le paso el listado de todas las provincias a la vista para que las muestre en la lista seleccionable
					$datos['provincias'] = $listadoProvincias;

					//Le paso la provincia seleccionada
					$datos['idProvinciaSel'] = $idProvincia;
					
					//Cargo la vista donde se muestra el formulario para crear una localidad y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_localidades_crear', $datos, true);
					
					//Cargo la vista principal con los datos de la vista para crear una localidad
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro seleccionado no existe
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
		
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente la localidad. La respuesta se muestra en un iframe dentro del formulario
	function crear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoAdministrador') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, la provincia y el estado de la provincia a crear.
			if($this->input->post('nombre',true) != "" && is_numeric($this->input->post('provincia',true)) && $this->input->post('provincia',true)>0 && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de las provincias
				$this->load->model('m_provincia');
				
				//Busco a la provincia para comprobar que exista
				$provincia = $this->m_provincia->get($this->input->post('provincia',true));
				
				//Tercera comprobacion: Que la provincia sea existente. 
				if($provincia->num_rows() == 1){
					//Cargo el modelo donde estan los datos de las localidades
					$this->load->model('m_localidad');
					
					//Creamos la localidad
					$resultado = $this->m_localidad->crear($this->input->post('nombre',true), $this->input->post('provincia',true), $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
					
					if($resultado == 1){
						echo("<script> alert('La localidad: ".$this->input->post('nombre',true)." se ha creado correctamente.');</script>");
					}else{
						echo("<script> alert('La localidad: ".$this->input->post('nombre',true)." no se ha creado. Ha habido un error.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la localidad pasada por la url
	function abrirPantallaModificar($idLocalidad=null, $idProvincia=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoAdministrador') == '1')){
			//Segunda comprobacion: Que idLocalidad pasado sea numerico y mayor que cero. Ademas que idProvincia pasado sea numerico y mayor o igual que cero.
			if(is_numeric($idLocalidad) && $idLocalidad>0 && is_numeric($idProvincia) && $idProvincia>=0){
				//Cargo el modelo donde estan los datos de las localidades registradas
				$this->load->model('m_localidad');
				
				//Busco a la localidad que hay que modificar
				$localidad = $this->m_localidad->get($idLocalidad);
				
				//Cargo el modelo donde estan los datos de las provincias registradas
				$this->load->model('m_provincia');
				
				//Busco a la provincia de la localidad que hay que modificar
				$provincia = $this->m_provincia->get($idProvincia);
				
				//Tercera comprobacion: Que la localidad y la provincia pasada por la url sea existente, o bien la provincia sea cero
				if($localidad->num_rows() == 1 && ($provincia->num_rows() == 1 || $idProvincia==0)){
					//Le paso la localidad a modificar a la vista
					$datos['localidadSel'] = $localidad;
					
					//Le paso la provincia que estaba seleccionada en la pantalla consultar
					$datos['idProvinciaSel'] = $idProvincia;
					
					//Busco a la localidad siguiente de la que hay que modificar
					$idLocalidadSig = $this->m_localidad->getContiguo($idLocalidad,1, $idProvincia);
					
					//Le paso la localidad siguiente de la que hay que modificar a la vista
					$datos['idLocalidadSig'] = $idLocalidadSig;
					
					//Busco a la localidad anterior de la que hay que modificar
					$idLocalidadAnt = $this->m_localidad->getContiguo($idLocalidad,-1, $idProvincia);
					
					//Le paso la localidad anterior de la que hay que modificar a la vista
					$datos['idLocalidadAnt'] = $idLocalidadAnt;
					
					//Busco todas las provincias y no solo las activas
					$listadoProvincias = $this->m_provincia->buscar();
					
					//Le paso el listado de todas las provincias a la vista para que las muestre en la lista seleccionable
					$datos['provincias'] = $listadoProvincias;
					
					//Cargo la vista donde se muestra el formulario para modificar una localidad y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_localidades_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar una localidad
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una localidad
	function modificar($idLocalidad=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && $this->session->userdata('permisoAdministrador') == '1'){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, la provincia y el estado de la localidad a modificar. 
			//Ademas que se haya pasado por la url el id de la localidad a modificar
			if(is_numeric($idLocalidad) && $idLocalidad>0 && $this->input->post('nombre',true) != "" && is_numeric($this->input->post('provincia',true)) && $this->input->post('provincia',true)>0 && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de las localidades
				$this->load->model('m_localidad');
				
				//Busco a la localidad que hay que modificar para comprobar que exista
				$localidad = $this->m_localidad->get($idLocalidad);
				
				//Cargo el modelo donde estan los datos de las provincias
				$this->load->model('m_provincia');
				
				//Busco a la provincia para comprobar que exista
				$provincia = $this->m_provincia->get($this->input->post('provincia',true));
				
				//Tercera comprobacion: Que la localidad pasada por la url sea existente. Lo mismo para la provincia.
				if($localidad->num_rows() == 1 && $provincia->num_rows() == 1){
					//Modificamos la localidad
					$resultado = $this->m_localidad->modificar($idLocalidad, $this->input->post('nombre',true), $this->input->post('provincia',true), $this->input->post('estado',true));
					
					if($resultado == 1){
						echo("<script> alert('La localidad: ".$this->input->post('nombre',true)." se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('La localidad: ".$this->input->post('nombre',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}				
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo solo se puede llamar con ajax
	//Sirve para actualizar un combo de localidades segun la provincia seleccionada. El primer parametro indica si hay que buscar todas las localidades
	//o solo las activas.
	function buscarLocalidadesPorProvincia($estado=null, $idProvincia=null){
	   	//Primera comprobacion: Que el usuario tenga iniciada la sesion
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que el id de la provincia sea numerico y mayor o igual que cero.  Que estado sea igual a 1 o 0.
			if(is_numeric($idProvincia) && $idProvincia>=0 && is_numeric($estado) && ($estado==0 || $estado==1)){
				//Cargo el modelo donde estan los datos de las provincias registradas
				$this->load->model('m_provincia');
				
				//Busco a la provincia que hay que buscarles las localidades
				$provincia = $this->m_provincia->get($idProvincia);
				
				//Tercera comprobacion: Que la provincia pasado por la url sea existente o bien igual a cero.
				if($provincia->num_rows() == 1 || $idProvincia==0){
					//Cargo el modelo donde estan los datos de las localidades
					$this->load->model('m_localidad');
					
					//Agrego la restriccion segun la provincia seleccionada
					$restriccion = " AND localidad.idProvincia=".$idProvincia;
					
					//Si estado=1 debemos trer solo las activas y no todas
					if($estado==1)	$restriccion .= " AND localidad.estado=".$estado;
					
					//Busco todas las localidades de la provincia en cuestion
					$localidades = $this->m_localidad->buscar($restriccion);
					
					//Le paso las localidades a la vista
					$datos['localidades'] = $localidades;
					
					//Cargo la vista donde generamos el selector de localidades
					$this->load->view('v_localidades_select', $datos);
				}
			}
		}
	}
}